package com.qkl.user.enums;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
@Getter
/**
 * 等级枚举（按业务实际等级调整，优先级数字越大等级越高）
 */
public enum UserLevelEnum {
    // 示例等级：需根据你的业务实际等级修改
    NO_LEVEL("游客", -1),
    ORDINARY_SOLDIER("普通会员士兵", 0),
    SECOND_LIEUTENANT("少尉", 1),
    FIRST_LIEUTENANT("中尉", 2),
    CAPTAIN("上尉", 3),
    MAJOR("少校", 4),
    LIEUTENANT_COLONEL("中校", 5),
    COLONEL("上校", 6),
    MAJOR_GENERAL("少将", 7),
    LIEUTENANT_GENERAL("中将", 8),
    GENERAL("上将", 9),
    MARSHAL("元帅", 10),
    GRAND_MARSHAL("大元帅", 11)
    ;

    // 获取等级名称
    // 等级名称
    private final String levelName;
    // 获取优先级（用于对比等级高低）
    // 优先级（数字越大等级越高）
    private final int priority;

    // 反向映射：等级名称→枚举，方便查询
    private static final Map<String, UserLevelEnum> NAME_TO_ENUM = new HashMap<>();
    private static final Map<Integer, UserLevelEnum> PRIORITY_TO_ENUM = new HashMap<>();
    static {
        for (UserLevelEnum enumItem : values()) {
            NAME_TO_ENUM.put(enumItem.levelName, enumItem);
            // 若优先级重复（如元帅和大元帅都是10），后定义的会覆盖前一个（按业务需求取舍）
            PRIORITY_TO_ENUM.put(enumItem.priority, enumItem);
        }
    }

    UserLevelEnum(String levelName, int priority) {
        this.levelName = levelName;
        this.priority = priority;
    }

    // 根据等级名称获取枚举（无匹配则返回NO_LEVEL）
    public static UserLevelEnum getByLevelName(String levelName) {
        return NAME_TO_ENUM.getOrDefault(levelName, NO_LEVEL);
    }
    /**
     * 根据优先级获取对应的枚举实例（无匹配返回 NO_LEVEL）
     * @param priority 优先级（如 1→少尉，2→中尉）
     * @return UserLevelEnum 枚举实例
     */
    public static UserLevelEnum getByPriority(int priority) {
        return PRIORITY_TO_ENUM.getOrDefault(priority, NO_LEVEL);
    }
    /**
     * 根据优先级直接获取等级名称（无匹配返回“游客”）
     * @param priority 优先级
     * @return 等级名称（如 3→“上尉”，10→“大元帅”）
     */
    public static String getLevelNameByPriority(Integer priority) {
        // 先通过 priority 获取枚举，再取名称（复用 getByPriority 逻辑，避免冗余）
        return getByPriority(priority).getLevelName();
    }
}
